import myAxios from '../myAxios/myAxios.js';
import myAxios28 from '../myAxios/myAxios28.js';
import { Get3WorkDate } from './GetSuJiOutPut.js';

import myArr from '../myAxios/myArr.js';
let { GetNumber } = myArr;
let GetWaiXiaoOutPut_JJQQ = async function (root) {
	// 1. 获取3个工作日后的日期（用于比较）
	const workDate3 = Get3WorkDate(); // 假设此函数已实现，返回一个Date对象
	const dateString = workDate3.toISOString().slice(0, 10).replace(/-/g, '/'); // 格式化为 'YYYY/MM/DD'

	// 2. 初始化结果数组 jjqqTable，用于存储每个物料的紧急欠缺数量
	const jjqqTable = []; // 结构: [{ MATNR: '...', JJQQ: ... }, ...]

	// 3. 检查传入的root数据是否有效
	if (!root || !root.销售 || !Array.isArray(root.销售)) {
		console.warn("传入的root数据无效或缺少'sales'数组");
		return jjqqTable; // 返回空数组
	}

	// 4. 直接使用 root.sales 作为数据源 (假设 root.sales 已经是对象数组)
	const salesData = root.销售;

	// 5. 遍历销售数据的每一行
	for (const saleItem of salesData) {
		const MATNR = saleItem.物料号; // 物料号
		let ERDAT = saleItem.ERDAT;    // 创建日期（字符串）
		const PROPERTIES = saleItem.PROPERTIES; // 属性（如"内销"）
		const 未交货数量 = GetNumber(saleItem.未交货数量) || 0; // 未交货数量，转换为数字，失败则为0

		// 5.1 跳过属性包含"内销"的物料
		if (PROPERTIES && PROPERTIES.includes("内销")) {
			continue;
		}

		// 5.2 处理ERDAT日期字符串，尝试格式化为 'YYYY/MM/DD'
		let formattedERDAT;
		try {
			// 尝试将ERDAT字符串转换为Date对象，然后再格式化为 'YYYY/MM/DD'
			// 注意：原始ERDAT的格式可能未知，这里假设它是一个能被Date识别的格式
			const dateObj = new Date(ERDAT);
			if (isNaN(dateObj.getTime())) {
				throw new Error('Invalid date format');
			}
			formattedERDAT = dateObj.toISOString().slice(0, 10).replace(/-/g, '/');
		} catch (error) {
			console.warn(`物料号 ${MATNR} 的ERDAT格式无效: ${ERDAT}`, error);
			continue; // 跳过当前物料
		}

		// 5.3 比较日期：只有当formattedERDAT <= dateString时，才累加未交货数量
		let JJQQToAdd = 0;
		// 使用localeCompare进行字符串比较（'YYYY/MM/DD'格式的字符串可以直接比较）
		if (formattedERDAT.localeCompare(dateString) <= 0) {
			JJQQToAdd = 未交货数量;
		}

		// 5.4 在jjqqTable中查找是否已存在该物料号
		const existingItem = jjqqTable.find(item => item.MATNR === MATNR);
		if (existingItem) {
			// 如果已存在，则累加JJQQ值
			existingItem.JJQQ += JJQQToAdd;
		} else {
			// 如果不存在，则添加新对象
			jjqqTable.push({
				MATNR: MATNR,
				JJQQ: JJQQToAdd
			});
		}
	}

	// 6. 返回最终结果
	return jjqqTable;
};

export {
	GetWaiXiaoOutPut_JJQQ,
};